package cn.tedu.oop;
/*拓展:方法重写之返回值类型(先大范围后小范围),,,先两个等于情况,在小于等于情况:(包含所有逻辑情况:类型分类+额外补全添加的重复的一个普遍例子)
 * 1.如果父类的方法的返回值类型与子类方法的返回值类型一样,肯定没错
 * 2.如果父类方法的返回值类型为:8大基本类型/String/void(三阳开泰),子类重写时应该保持一致
 * 3.如果父类方法的返回值类型是其他引用类型,子类方法:父类返回值类型的子类/两者相同
 * */
public class TestMethod {
}
//1.创建父类
class Fu{
    public void get(){
        System.out.println("父类的get()");
    }
    //5.定义方法:eat,返回值类型int,返回值666
    public int eat(){ //方法名参数列表方法体
        return 666;
    }
    //6.定义方法:play,返回值类型String,返回值"中午好"
    public String play(){
        String s = "中午好";
        return s; //字符串是String中的一个
    }
    //7.定义方法:clean,返回值类型Animal
    public Animal clean(){  //类的对象的数据类型=是类名
        Animal a = new Animal();  //方法里面也可以创建类的对象,导包导类,,
        return a;//return,返回Animal的值就是类的对象(类的众多对象的值中,其中一个对象是其中一个)
        //   return new Animal();//or Animal()的含参构造
    } //对象就是类的值,同时对象可以交给变量保存,局部变量使用需要手动赋值
}
//2.创建子类
class Zi extends Fu{
    @Override
    public Cat clean(){ //子类重写方法的返回值类型是,父类元方法返回值类型子类或,相同
        Cat c = new Cat(); //没报错,,
        return c;//父类返回值是父类Animal,子类返回值是子类Cat
    }
    /*@Override
    public Animal clean(){ //子类重写方法的返回值类型是,父类元方法返回值类型子类或,相同
        Animal a = new Animal();
        return a;
    }*/
    @Override
    public void get(){
        System.out.println("子类的get()");
    }
    @Override
    public int eat(){
        return 777;
    }

    public String play(){
        return "下午好~";
    }

}

//3.创建动物类
class Animal{}
//4.创建动物类的子类小猫类
class Cat extends Animal{}